// pages/record/record.js
const app = getApp()

Page({
  data: {
    // 日期相关
    currentDate: '',
    formattedDate: '',
    minDate: '2020-01-01',
    maxDate: '',
    
    // 经期状态
    periodStatus: -1, // -1: 未选择, 0: 否, 1: 是
    
    // 经血量
    flowLevel: -1, // -1: 未选择, 0: 无, 1: 少量, 2: 中量, 3: 大量, 4: 极多
    
    // 身体症状
    symptomOptions: ['腹痛', '头痛', '腰痛', '乏力', '乳房胀痛', '痘痘', '水肿', '失眠', '嗜睡', '食欲增加', '食欲减退'],
    selectedSymptoms: {},
    
    // 情绪状态
    moodOptions: ['开心', '平静', '焦虑', '烦躁', '抑郁', '敏感', '兴奋', '疲惫', '压力大'],
    selectedMoods: {},
    
    // 备注
    notes: '',
    
    // 是否是编辑模式
    isEdit: false,
    recordId: '',
    
    // 原始记录数据（用于编辑模式）
    originalRecord: null
  },

  onLoad: function(options) {
    // 设置最大日期为今天
    const today = new Date()
    const maxDate = this.formatDate(today)
    
    // 如果有传入日期参数，则使用该日期，否则使用今天
    let currentDate = options.date ? options.date : maxDate
    
    this.setData({
      currentDate: currentDate,
      formattedDate: this.formatDisplayDate(new Date(currentDate)),
      maxDate: maxDate
    })
    
    // 如果有记录ID，则是编辑模式
    if (options.recordId) {
      this.setData({
        isEdit: true,
        recordId: options.recordId
      })
      this.fetchRecordData(options.recordId)
    }
  },
  
  // 格式化日期为YYYY-MM-DD
  formatDate: function(date) {
    const year = date.getFullYear()
    const month = (date.getMonth() + 1).toString().padStart(2, '0')
    const day = date.getDate().toString().padStart(2, '0')
    return `${year}-${month}-${day}`
  },
  
  // 格式化显示日期为YYYY年MM月DD日 星期X
  formatDisplayDate: function(date) {
    const year = date.getFullYear()
    const month = date.getMonth() + 1
    const day = date.getDate()
    const weekDays = ['日', '一', '二', '三', '四', '五', '六']
    const weekDay = weekDays[date.getDay()]
    return `${year}年${month}月${day}日 星期${weekDay}`
  },
  
  // 日期选择器变化
  onDateChange: function(e) {
    const date = e.detail.value
    this.setData({
      currentDate: date,
      formattedDate: this.formatDisplayDate(new Date(date))
    })
    
    // 如果选择了不同的日期，检查是否有该日期的记录
    if (this.data.isEdit && date !== this.formatDate(new Date(this.data.originalRecord.date))) {
      this.checkExistingRecord(date)
    }
  },
  
  // 检查是否存在指定日期的记录
  checkExistingRecord: function(date) {
    wx.cloud.callFunction({
      name: 'getDailyRecord',
      data: {
        date: date
      }
    }).then(res => {
      if (res.result.status === 'success' && res.result.data) {
        // 如果存在记录，提示用户
        wx.showModal({
          title: '提示',
          content: '该日期已有记录，是否编辑该记录？',
          success: (res) => {
            if (res.confirm) {
              // 用户点击确定，跳转到编辑该记录
              wx.redirectTo({
                url: `/pages/record/record?recordId=${res.result.data._id}`
              })
            }
          }
        })
      }
    }).catch(err => {
      console.error('检查记录失败:', err)
    })
  },
  
  // 设置经期状态
  setPeriodStatus: function(e) {
    const status = parseInt(e.currentTarget.dataset.status)
    this.setData({
      periodStatus: status
    })
    
    // 如果选择了"否"，则清空经血量
    if (status === 0) {
      this.setData({
        flowLevel: -1
      })
    }
  },
  
  // 设置经血量
  setFlowLevel: function(e) {
    const level = parseInt(e.currentTarget.dataset.level)
    this.setData({
      flowLevel: level
    })
  },
  
  // 切换症状选择
  toggleSymptom: function(e) {
    const symptom = e.currentTarget.dataset.symptom
    const selectedSymptoms = {...this.data.selectedSymptoms}
    
    if (selectedSymptoms[symptom]) {
      selectedSymptoms[symptom] = false
    } else {
      selectedSymptoms[symptom] = true
    }
    
    this.setData({
      selectedSymptoms: selectedSymptoms
    })
  },
  
  // 切换情绪选择
  toggleMood: function(e) {
    const mood = e.currentTarget.dataset.mood
    const selectedMoods = {...this.data.selectedMoods}
    
    if (selectedMoods[mood]) {
      selectedMoods[mood] = false
    } else {
      selectedMoods[mood] = true
    }
    
    this.setData({
      selectedMoods: selectedMoods
    })
  },
  
  // 备注输入
  onNotesInput: function(e) {
    this.setData({
      notes: e.detail.value
    })
  },
  
  // 获取记录数据（编辑模式）
  fetchRecordData: function(recordId) {
    wx.showLoading({
      title: '加载中',
    })
    
    wx.cloud.callFunction({
      name: 'getDailyRecord',
      data: {
        recordId: recordId
      }
    }).then(res => {
      wx.hideLoading()
      
      if (res.result.status === 'success' && res.result.data) {
        const record = res.result.data
        
        // 转换症状和情绪数组为对象
        const selectedSymptoms = {}
        const selectedMoods = {}
        
        if (record.symptoms && record.symptoms.length > 0) {
          record.symptoms.forEach(symptom => {
            selectedSymptoms[symptom] = true
          })
        }
        
        if (record.mood && record.mood.length > 0) {
          record.mood.forEach(mood => {
            selectedMoods[mood] = true
          })
        }
        
        // 设置表单数据
        this.setData({
          originalRecord: record,
          currentDate: this.formatDate(new Date(record.date)),
          formattedDate: this.formatDisplayDate(new Date(record.date)),
          periodStatus: record.flow_level >= 0 ? 1 : 0,
          flowLevel: record.flow_level >= 0 ? record.flow_level : -1,
          selectedSymptoms: selectedSymptoms,
          selectedMoods: selectedMoods,
          notes: record.notes || ''
        })
      } else {
        wx.showToast({
          title: '记录不存在',
          icon: 'none'
        })
        setTimeout(() => {
          wx.navigateBack()
        }, 1500)
      }
    }).catch(err => {
      wx.hideLoading()
      console.error('获取记录失败:', err)
      wx.showToast({
        title: '加载失败',
        icon: 'none'
      })
    })
  },
  
  // 取消按钮
  onCancel: function() {
    wx.navigateBack()
  },
  
  // 保存按钮
  onSave: function() {
    // 验证表单
    if (this.data.periodStatus === -1) {
      wx.showToast({
        title: '请选择经期状态',
        icon: 'none'
      })
      return
    }
    
    if (this.data.periodStatus === 1 && this.data.flowLevel === -1) {
      wx.showToast({
        title: '请选择经血量',
        icon: 'none'
      })
      return
    }
    
    // 收集表单数据 - 统一使用日期字符串格式
    const recordData = {
      date_str: this.data.currentDate, // 保存日期字符串，如 "2025-07-27"
      flow_level: this.data.periodStatus === 1 ? this.data.flowLevel : -1,
      symptoms: Object.keys(this.data.selectedSymptoms).filter(key => this.data.selectedSymptoms[key]),
      mood: Object.keys(this.data.selectedMoods).filter(key => this.data.selectedMoods[key]),
      notes: this.data.notes || ''
    }

    console.log('准备保存的记录数据:', recordData)
    
    wx.showLoading({
      title: '保存中',
    })
    
    // 调用云函数保存记录
    wx.cloud.callFunction({
      name: 'saveDailyRecord',
      data: {
        recordId: this.data.isEdit ? this.data.recordId : '',
        recordData: recordData
      }
    }).then(res => {
      wx.hideLoading()
      
      if (res.result.status === 'success') {
        wx.showToast({
          title: '保存成功',
          icon: 'success'
        })
        
        // 如果是经期开始，询问是否创建新周期
        if (this.data.periodStatus === 1 && 
            (!this.data.originalRecord || this.data.originalRecord.flow_level === -1)) {
          this.askCreateNewCycle()
        } else {
          // 刷新详情页数据
          this.refreshDetailPage()

          setTimeout(() => {
            wx.navigateBack()
          }, 1500)
        }
      } else {
        wx.showToast({
          title: '保存失败',
          icon: 'none'
        })
      }
    }).catch(err => {
      wx.hideLoading()
      console.error('保存记录失败:', err)
      wx.showToast({
        title: '保存失败',
        icon: 'none'
      })
    })
  },
  
  // 询问是否创建新周期
  askCreateNewCycle: function() {
    wx.showModal({
      title: '新周期',
      content: '检测到您标记了经期，是否将今天设为新周期的开始日？',
      success: (res) => {
        if (res.confirm) {
          this.createNewCycle()
        } else {
          // 刷新详情页数据
          this.refreshDetailPage()
          wx.navigateBack()
        }
      }
    })
  },
  
  // 创建新周期
  createNewCycle: function() {
    wx.showLoading({
      title: '处理中',
    })

    wx.cloud.callFunction({
      name: 'createCycle',
      data: {
        startDate: this.data.currentDate
      }
    }).then(res => {
      wx.hideLoading()

      if (res.result.status === 'success') {
        wx.showToast({
          title: '新周期已创建',
          icon: 'success'
        })
        // 刷新详情页数据
        this.refreshDetailPage()
        setTimeout(() => {
          wx.navigateBack()
        }, 1500)
      } else {
        wx.showToast({
          title: '创建周期失败',
          icon: 'none'
        })
        // 刷新详情页数据
        this.refreshDetailPage()
        wx.navigateBack()
      }
    }).catch(err => {
      wx.hideLoading()
      console.error('创建周期失败:', err)
      wx.showToast({
        title: '创建周期失败',
        icon: 'none'
      })
      // 刷新详情页数据
      this.refreshDetailPage()
      wx.navigateBack()
    })
  },

  // 返回按钮
  onBack: function() {
    wx.navigateBack()
  },

  // 刷新上一个页面的数据
  refreshDetailPage: function() {
    try {
      const pages = getCurrentPages()
      if (pages.length >= 2) {
        const prevPage = pages[pages.length - 2]
        console.log('上一页路由:', prevPage.route)

        // 检查上一个页面是否是详情页
        if (prevPage.route === 'pages/day_detail/day_detail' && typeof prevPage.fetchDayDetail === 'function') {
          console.log('刷新详情页数据，日期:', prevPage.data.date)
          prevPage.fetchDayDetail(prevPage.data.date)
        }
        // 检查上一个页面是否是首页
        else if (prevPage.route === 'pages/home/home' && typeof prevPage.fetchUserCycleData === 'function') {
          console.log('刷新首页数据')
          prevPage.fetchUserCycleData()
        }
      }
    } catch (error) {
      console.error('刷新上一页失败:', error)
    }
  }
})